#include "mode_handle.h"

void power_off(SYS_OPT_KEY opt);
void mode_rainbow(SYS_OPT_KEY opt);



void power_off(SYS_OPT_KEY opt)
{
    static int time =0;
    u8 ssp;
    if(app_logic_get_last_ssp() != app_logic_get_ssp())//如果是第一次进入
    {   
        LOG_INFO("power_off_dazzling\n");
        if(SSP_LOGO != app_logic_get_last_ssp() ) //恢复程序
        {
            app_logic_set_recover_ssp(app_logic_get_last_ssp()); //将上一次的状态保存
        }
        else
        {
            /*
            if (driver_nvs_part_read_u8(APP_STATUS,&ssp) == ESP_OK) //是否能正确读取上次断电前的状态
            {
                if((SSP_POWER_OFF!=ssp)||(SSP_LOGO!=ssp))
                {
                    app_logic_set_recover_ssp(ssp);
                    LOG_INFO("ssp %d\n",ssp);   
                }
                else
                {
                    app_logic_set_recover_ssp(SSP_MODE_1);
                }
            }
            else
            */
            {
                app_logic_set_recover_ssp(SSP_MODE_1);
            }
        }

        app_logic_set_last_ssp(app_logic_get_ssp()); //将上次的状态与本次的状态同步
        disp_clear_light(get_light_length());
        time = arch_os_ms_now();
    }

    if(arch_os_ms_elapsed(time)>=(20)) //计时20ms
    {
        time = arch_os_ms_now();
        disp_clear_light(get_light_length());
    }

    if (opt.oepation == OPT_POWER_TURNON)
    {
        app_logic_set_ssp(app_logic_get_recover_ssp());
    }
}

void logo(SYS_OPT_KEY opt)
{
    static u16 i =1;
    static int time =0;
    static int time1 =0;
    if(app_logic_get_last_ssp() != app_logic_get_ssp())//如果是第一次进入
    {
        LOG_INFO("logo_dazzling\n");
        app_logic_set_last_ssp(app_logic_get_ssp()); //将上次的状态与本次的状态同步
        disp_clear_light(get_light_length());
        set_flag(1);
    }

    if(arch_os_ms_elapsed(time) >=(20)) //大约20ms
    {
        light_detection_ws2812(i);
        time=arch_os_ms_now();
    }

    if(arch_os_ms_elapsed(time1) >=(1*1000)) //大约1s
    {
        time1=arch_os_ms_now();
        if (i>3) //当检测完一次后
        {   
            task_wifi_init();
            app_logic_set_ssp(SSP_POWER_OFF); //让设备进入关机模式
        }
        i++;  
    }
}

void mode_rainbow(SYS_OPT_KEY opt)
{
    static int time =0;
    if(app_logic_get_last_ssp() != app_logic_get_ssp())//如果是第一次进入
    {
        LOG_INFO("mode_rainbow_dazzling_9\n");
        set_custom_recssp(0); //强制复位
        app_logic_set_last_ssp(app_logic_get_ssp()); //将上次的状态与本次的状态同步
        disp_clear_light(get_light_length()); // 清空前灯带的颜色
    }
    
    if(arch_os_ms_elapsed(time)>=(20)) //计时20ms
    {
        time = arch_os_ms_now();
        light_rainbow_ws2812();
    }
    
    if(opt.oepation == OPT_POWER_TURNOFF) //关机
    {
        app_logic_set_ssp(SSP_POWER_OFF);
    }
}

light_MODE light_mode_dazzling_handle[NUM_SYS_SSP]=
{
    {power_off}, //0关机灯效
    {logo}, //无灯效代表刚启动
    {mode_rainbow}, //1彩虹灯效
    {mode_scene}, //2场景模式
    {}, //3调色盘模式
    {mode_custom}, //4自定义模式
};


void mode_handle(SYS_OPT_KEY opt)
{
    if(light_mode_dazzling_handle[app_logic_get_ssp()].handle)   //先判断是否存在这个处理函数
    {
        light_mode_dazzling_handle[app_logic_get_ssp()].handle(opt);//进行处理
    }
    else
    {
        LOG_ERROR("cur ssp handle is not defined\n");
    }
}